CPU Scheduling

OS์˜ ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ธฐ์ดˆ๊ฐ€ ๋˜๋Š” ๊ฐœ๋…

[!๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ชฉ์ ์„ฑ] > CPU์˜ ์†๋„๊ฐ€ ๋„ˆ๋ฌด ๋น ๋ฅด๊ธฐ์— ์œ ํœด์‹œ๊ฐ„์ด ํฌ๋‹ค. ์ด๋ฅผ Interliving์„ ์ด์šฉํ•œ ์‹œ๋ถ„ํ• ์„ ํ†ตํ•ด์„œ CPU ์‚ฌ์šฉ๋Ÿ‰์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

Multi Thread์™€ Multi Process๋Š” ์—„์—ฐํžˆ ๋‹ค๋ฅธ ๊ฐœ๋…์ด์ง€๋งŒ ์ž‘๋™์›๋ฆฌ๋Š” ๋น„์Šทํ•˜๊ธฐ์— ํ•ด๋‹น ์ฑ•ํ„ฐ์—์„œ๋Š” ์ด๋ฅผ Multi Processing์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•œ๋‹ค.

5.1 ๊ธฐ๋ณธ ๊ฐœ๋…

CPU์˜ ์ฒ˜๋ฆฌ์†๋„๋Š” ์ปดํ“จํ„ฐ๊ฐ€ ๋ฐœ์ „ํ• ์ˆ˜๋ก ๋นจ๋ผ์กŒ๊ณ  ์ด๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋นจ๋ฆฌ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋Š”๋ฐ์— ์ง๊ฒฐ๋˜๋ฉด์„œ CPU์˜ ํ™œ์šฉ์„ 100%๋กœ ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ณ  CPU์˜ ์œ ํœด์‹œ๊ฐ„(Idle Time)์„ ์ฆ๊ฐ€์‹œํ‚ค๊ฒŒ๋œ ๊ฒŒ๊ธฐ๊ฐ€ ๋œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ Cpu Burst ์ˆœ๊ฐ„๊ณผ I/O Busrt์˜ ์ˆœ๊ฐ„๋“ค(CPU-I/O Burst Cycle)์„ ์ผ๋ จ์˜ ๊ณผ์ •์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ณผ์ •์œผ๋กœ ๊ฐ Burst๋Š” ๋‹ค์Œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค..

  • I/O Burst : I/O ์žฅ์น˜์˜ ์ž‘๋™์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ž‘์—…์œผ๋กœ Wating Queue์—์„œ Ready Queue๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋Š” ๊ณผ์ •์ด๋‹ค.
  • CPU Burst : CPU๊ฐ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์œผ๋กœ Waiting Queue์—์„œ Running Queue๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜๋Š” ๊ณผ์ •์ด๋‹ค.

CPU Core๊ฐ€ ํ•˜๋‚˜ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํ•˜๋‚˜์˜ ์ž‘์—…(Process)๊ฐ€ ๋๋‚˜๋ฉด ์ถœ๋ ฅ์ด ๋˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋˜๋Š” ๊ณผ์ •์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค.

CPU ์ฒ˜๋ฆฌ ๊ณผ์ •

์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ๋กœ๋“œ๋˜์ง€๋งŒ CPU๋ฅผ ์„ ์ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ด ๋œ๋‹ค. ์ดํ›„ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์„ ์ ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ready์ƒํƒœ์—์„œ ๋Œ€๊ธฐํ•œ๋‹ค.

  • P1 : CPU์—์„œ ์‹คํ–‰
  • P2, P3 : ready Queue์—์„œ ๋Œ€๊ธฐ
  • ์—ฌ๊ธฐ์„œ ํŠน์ • ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋ฉด Waiting Queue์—์„œ ๋Œ€๊ธฐ

NOTE

> Content์—ฌ๊ธฐ์„œ Waiting Queue์—์„œ ๋Œ€๊ธฐํ•˜๋Š” ๊ณผ์ •์€ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฒƒ์ธ๊ฐ€? ์•„๋‹Œ๊ฐ€?

๊ฒฐ๊ตญ CPU์˜ ์ฒ˜๋ฆฌ์†๋„๊ฐ€ ๋นจ๋ผ์ง€๋ฉด์„œ CPU๋ฅผ 100% ํ™œ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋˜์—ˆ๊ธฐ์— ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด์„œ CPU Scheduling์˜ ๊ฐœ๋…์ด ๋„์ž…๋œ๋‹ค.

Preemptive vs Non-preemptive

์„ ์ ํ˜• ์ปค๋„, ๋น„์„ ์ ํ˜• ์ปค๋„๋กœ๋„ ๋ถˆ๋ฆฐ๋‹ค. ์—ฌ๊ธฐ์„œ์˜ ์„ ์ ํ˜•์€ ์ง€๊ธˆ ํ™œ์„ฑํ™”๋œ, CPU๋ฅผ ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ซ“์•„๋‚ธ๋‹ค ๋ผ๊ณ  ์ƒ๊ฐํ•ด๋„ ๋œ๋‹ค.

Non-Preemptive (๋น„์„ ์ ํ˜• ์ปค๋„)

CPU๋ฅผ ์‚ฌ์šฉ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ์—ฌ๊ธฐ์„œ์˜ ์ข…๋ฃŒ๋Š” ์‹คํ–‰์™„๋ฃŒ ๋˜๋Š” wating ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒฐ๊ณผ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

Preemptive (์„ ์ ํ˜• ์ปค๋„)

CPU Scheduler๊ฐ€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋” ๋†’์€ ํ”„๋กœ์„ธ์Šค์˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚ด์ซ“๋Š” ์ฆ‰, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์„ ์ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

CPU Scheduling ๊ณผ์ •์—์„œ ํŒ๋‹จ์ด ์ผ์–ด๋‚˜๋Š” ์ข…๋ฅ˜

  1. Running โ†’ Waiting : I/O ์š”์ฒญ์ด๋‚˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด wait() ํ˜ธ์ถœ ์‹œ ์‹คํ–‰๋œ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ I/O ์š”์ฒญ์ด๋‚˜ ์ž์‹ ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒฝ์šฐ์ด๊ธฐ์— CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณผ์ •์œผ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ์— ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ CPU๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Scheduling Decision์ด ํ•„์š”์—†๋Š” Non-preemptive ๊ณผ์ •์ด๋‹ค.
  2. Running โ†’ Ready : ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จํ•˜๊ณ  ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ๋Š” CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” Preemptive ๋˜๋Š” Non-preemptive ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. Waiting โ†’ Ready : I/O ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰ ์ค€๋น„๊ฐ€ ๋˜์—ˆ์„ ๊ฒฝ์šฐ๋กœ Waiting ์ƒํƒœ์—์„œ Reday ์ƒํƒœ๋กœ ์ „ํ™˜๋œ ํ”„๋กœ์„ธ์Šค๋Š” Ready ํ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ CPU ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ‰๊ฐ€ํ•˜์—ฌ Preemptive ๋˜๋Š” Non-preemptive ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  4. Running โ†’ Terminate : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž‘์—…์„ ์™„๋ฃŒํ•˜๊ณ  ์ข…๋ฃŒ๋  ๊ฒฝ์šฐ์ด๋‹ค. ์ด ๋•Œ, CPU๋Š” ์ค€๋น„ ํ์—์„œ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•˜๊ธฐ์— Scheduling Decision์ด ํ•„์š” ์—†๋Š” Non-preemptive ๊ณผ์ •์ด๋‹ค.

Dispatcher

CPU ์Šค์ผ€์ค„๋ง์˜ ์ค‘์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ, CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์„ ํƒํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹ค์ œ๋กœ CPU์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ์–ด๊ถŒ์„ ๋„˜๊ธฐ๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ์ด๋‹ค.

์ฆ‰, Context Switch๋ฅผ ํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ

Dispatcher ๊ธฐ๋Šฅ
  • Context Switching : ์ด์ „ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ(๋ ˆ์ง€์Šคํ„ฐ, ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ ๋“ฑ)๋ฅผ ์ €์žฅํ•˜๊ณ , ์ƒˆ๋กœ ์„ ํƒ๋œ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต์› ์ˆ˜ํ–‰
  • User Mode Switching : CPU๋ฅผ ์ปค๋„ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜์—ฌ ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์žฌ๊ฐœ :CPU๋ฅผ ์ƒˆ ํ”„๋กœ์„ธ์Šค์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋œ ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜๋กœ ์ด๋™์‹œ์ผœ ์‹คํ–‰์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ค‘๋‹จ๋œ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํ”„๋กœ๊ทธ๋žจ์˜ ์ ์ ˆํ•œ ์œ„์น˜๋กœ ์ด๋™ํ•˜๋Š” ๊ฒƒ

Scheduler

> - Scheduler : ์–ด๋–ค Process๋ฅผ ์ฒ˜๋ฆฌํ• ์ง€ ์„ ํƒํ•˜๋Š” ๊ฒƒ
> - Dispatcher : ์‹ค์ œ Switch ๊ณผ์ •์„ ์ˆ˜ํ–‰

์—ฌ๊ธฐ์„œ Dispatcher๋Š” ๊ฐ€๋Šฅํ•œ ๋นจ๋ผ์•ผํ•œ๋‹ค! Contexxt Switch๋งˆ๋‹ค ์‚ฌ์šฉ๋˜๋Š” Dispatcher๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ Stop ์ƒํƒœ์™€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ Start ์‚ฌ์ด์— Dispatch Latency๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ‰์†Œ CPU๋ฅผ 100%๋ฅผ ์ฐ๋Š” ์ƒํ™ฉ์ด ์˜จ๋‹ค๋ฉด Dispatch๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ 100%๋ฅผ ์ฐ๋Š”๋‹ค. ๊ทธ๋ ‡๊ธฐ์— Dispatcher Latency๋Š” CPU ์‚ฌ์šฉ์‹œ๊ฐ„๋ณด๋‹ค ์งง์•„์ง€๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

5.2 Scheduling Criteria

CPU ์Šค์ผ€์ค„๋ง์— ๋Œ€ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—„์ฒญ ๋‹ค์–‘ํ•˜๊ฒŒ ์กด์žฌํ•˜๊ณ  ํŠน์ • ์ƒํ™ฉ์— ์œ ๋ฆฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์ด ์กด์žฌํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ์„ ํƒํ•  ๋•Œ์— ๋‹ค์Œ ๊ธฐ์ค€๋“ค์„ ๊ณ ๋ คํ•ด์•ผํ•œ๋‹ค.

  • CPU Utillization : ์ตœ๋Œ€ํ•œ CPU๋ฅผ ํ™œ์šฉํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.
  • Throughput : ๋‹จ์œ„์‹œ๊ฐ„ ๋‚ด์— Process์˜ ์ฒ˜๋ฆฌ๋Ÿ‰
  • Turnaround Time : ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์— ๋„๋‹ฌ(์‹คํ–‰ ์ค€๋น„ ์ƒํƒœ)ํ•œ ์‹œ๊ฐ„๋ถ€ํ„ฐ ์ข…๋ฃŒ๋˜๋Š” ์‹œ๊ฐ„
  • Waiting Time : Process๊ฐ€ Ready Queue์—์„œ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„์œผ๋กœ CPU๋ฅผ ํ• ๋‹น๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋Š” ์‹œ๊ฐ„์ด๋‹ค.
  • Response Time : ๋ฐ˜์‘๊นŒ์ง€ ์˜ค๋Š” ์‹œ๊ฐ„์œผ๋กœ ์ฃผ๋กœ Interactive ์‹œ์Šคํ…œ(e.g. ๊ฒŒ์ž„)์—์„œ ์‚ฌ์šฉ๋œ๋‹ค. UX์ ์ธ ์š”์†Œ์— ์ง‘์ค‘ํ•œ ๋ถ€๋ถ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

5.3 Scheduling Algorithms

CPU ์Šค์ผ€์ค„๋ง์—์„œ๋Š” Ready Queue์— ์กด์žฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ CPU์— ํ• ๋‹นํ•  ๊ฒƒ์ด๋ƒ์— ๋Œ€ํ•œ ๊ณผ์ •์ด ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค. ํ•ด๋‹นํ•˜๋Š” ๋กœ์ง, ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•ด ์œ„์˜ ๊ธฐ์ค€๋“ค์˜ ์š”๊ฑด์„ ๋งž์ถ”๋ฉฐ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹ค์–‘ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์กด์žฌํ•œ๋‹ค.

FCFS Scheduling

First-Come, First-Served๋กœ ๋จผ์ € ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ˜•ํƒœ๋กœ FIFO Queue๋ฅผ ํ†ตํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„ ๋ฌธ์ œ๋Š” ๋‹ค์Œ์˜ ์กฐ๊ฑด์„ ๊ฐ€์ง„๋‹ค.

  • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๋™์ผ ์‹œ๊ฐ„(0 ์‹œ๊ฐ„)์— ๋„์ฐฉํ•œ๋‹ค.
  • CPU Burst Time์€ ๋ฐ€๋ฆฌ์„ธ์ปจ ๋‹จ์œ„๋กœ ์œ„ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํ”„๋กœ์„ธ์Šค ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ์‹œ๊ฐ„์ด ์ฃผ์–ด์ ธ ์žˆ๋‹ค.
  • ๋™์ผ ์‹œ๊ฐ„์— ๋„์ฐฉํ•˜์˜€์ง€๋งŒ Queue์—๋Š” P1, P2, P3์— ์Œ“์ธ๋‹ค. (์ด๋Š” ns์™€ ๊ฐ™์€ ๋งค์šฐ ์ž‘์€ ์˜ค์ฐจ์ด๊ธฐ์— ์„ค๋ช…์„ ์œ„ํ•ด์„œ๋„ ๋ฌด์‹œ๋˜๊ณ  ์‹ค์ œ ๊ตฌํ˜„์—์„œ๋„ ๋ฌด์‹œ๋˜๋„๋ก ์ฒ˜๋ฆฌ๋˜๊ธฐ๋„ ํ•œ๋‹ค.)

CPU๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์„ Gantt Chart๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ์ฒ˜๋ฆฌ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. P1์ด ๋จผ์ € ๋“ค์–ด์™”๊ธฐ์— FCFS ์›์น™์— ์˜ํ•ด P1์„ ์ฒ˜๋ฆฌ
  2. P1์˜ ์ฒ˜๋ฆฌ ํ›„ ๊ทธ ๋‹ค์Œ ์ˆœ์„œ์ธ P2 ์ฒ˜๋ฆฌ
  3. P2๊ฐ€ Terminate๋œ ํ›„ P3๋ฅผ Running State๋กœ ๋ณ€ํ™˜ ๋ฐ CPU๊ฐ€ ์ฒ˜๋ฆฌ
  4. P3์˜ Ternimate ์ƒํƒœ ๋ณ€ํ™˜ ํ›„ ์ฒ˜๋ฆฌ ์ข…๋ฃŒ

์œ„ ๊ณผ์ •์—์„œ Waiting Time์„ ๊ณ„์‚ฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • P1 = 0, P2 = 24, P3 = 27
  • Total Waiting Time : 0 + 24 + 27 = 51
  • Average Waiting Time : 53/3 = 17

์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๋Š” Average Waiting Time์— ์ง‘์ค‘ํ•˜์—ฌ ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ฒ˜๋ฆฌํ•ด์•ผํ•œ๋‹ค.

Turnaround Time ๊ณ„์‚ฐ
  • P1 = 24, P2 = 27, P3 = 30
  • Total Turnaround Time : 24 + 27 + 30 = 81
  • Average Turnaround Time : 81/3 = 27

๋˜ ๋‹ค๋ฅธ ์ƒํ™ฉ์œผ๋กœ P2, P3, P1 ์ˆœ์„œ๋กœ Ready Queue์— ์Œ“์˜€๋‹ค๊ณ  ๋ณด์ž. CPU๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. P2๊ฐ€ ๋จผ์ € ๋“ค์–ด์™”๊ธฐ์— FCFS ์›์น™์— ์˜ํ•ด P2๋ฅผ ์ฒ˜๋ฆฌ
  2. P2์˜ ์ฒ˜๋ฆฌ ํ›„ ๊ทธ ๋‹ค์Œ ์ˆœ์„œ์ธ P3 ์ฒ˜๋ฆฌ
  3. P3๊ฐ€ Terminate๋œ ํ›„ P1์„ Running State๋กœ ๋ณ€ํ™˜ ๋ฐ CPU๊ฐ€ ์ฒ˜๋ฆฌ
  4. P1๊ฐ€ Terminate ์ƒํƒœ๋กœ ๋ณ€ํ™˜๋œ ํ›„ ์ฒ˜๋ฆฌ ์ข…๋ฃŒ

์œ„ ๊ณผ์ •์—์„œ Waiting Time์„ ๊ฒŒ์‚ฐํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • P1 = 6, P2 = 0, P3 = 3
  • Total Waiting Time : 6 + 0 + 3 = 9
  • Average Waiting Time : 9/3 = 3
Turnaround Time ๊ณ„์‚ฐ
  • P1 = 30, P2 = 3, P3 = 6
  • Toal Turnaround Time : 30 + 3 + 6 = 39
  • Average Turnaround Time : 39 / 3 = 13
์ •๋ฆฌ

FCFS ์Šค์ผ€์ค„๋ง์„ ๋”ฐ๋ฅด๋ฉด Average Waiting Time์ด ์ตœ์ ์ด ๋  ์ˆ˜ ์—†๋‹ค. ํ”„๋กœ์„ธ์Šค์˜ CPU-burst time์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋˜ํ•œ, FCFS ์Šค์ผ€์ค„๋ง์€ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋œ ํ›„์— ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„ํ–‰๋˜๊ธฐ์— Non-Preemptive์ด๋‹ค.

Convoy

> Content

Shortest-Job-First Scheduling

ํ•ด๋‹น ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ€์žฅ CPU burst ์‹œ๊ฐ„์ด ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์Œ ์ˆœ์„œ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ์— shortest-next-CPU-burst-first-scheduling์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค์˜ CPU Burst ์‹œ๊ฐ„ใ…‡๋‹ˆ ๋™์ผํ•˜๋ฉด FCFS์™€ ๋™์ผํ•œ ๋™์ž‘์ด๋‹ค.

์œ„ ๊ทธ๋ฆผ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•  ๋•Œ, SJF๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

  1. CPU Burst ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์ ์€ P4๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋œ๋‹ค.
  2. CPU Burst ์‹œ๊ฐ„์ด ๊ทธ ๋‹ค์Œ์„ ์ ์€ P1์ด ์ฒ˜๋ฆฌ๋œ๋‹ค.
  3. P3๊ฐ€ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  4. P2๊ฐ€ ์ฒ˜๋ฆฌ๋œ ํ›„ ์ข…๋ฃŒ๋œ๋‹ค.
Waiting Time
  • P1 = 3, P2 = 16, P3 = 9, P4 = 0
  • Total Waiting Time : 3 + 16 + 9 + 0 = 28
  • Average Waiting Time : 28/4 = 7
Turnaround time:
  • P1 = 9, P2 = 24, P3 = 16, P4 = 3
  • Total Turnaround Time : 9 + 24 + 16 + 3 = 52
  • Average Turnaround Time : 52/4 = 13
SJF์˜ ์‹คํ˜„๊ฐ€๋Šฅ์„ฑ

SJF๋Š” ์ด๋ก ์ƒ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ทธ๋ ‡์ง€๋งŒ, ํ”„๋กœ์„ธ์Šค์˜ CPU burst Time์„ ์•Œ ๋ฐฉ๋ฒ•์€ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ์— ๊ทผ์‚ฌํ™”ํ•˜์—ฌ SJF ์Šค์ผ€์ค„๋ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋‹ค์Œ CPU Burst Time์„ ์˜ˆ์ธกํ•˜๊ณ  ์˜ˆ์ธก๋œ CPU Burst ์‹œ๊ฐ„ ์ค‘ ๊ฐ€์žฅ ์งง์€ ์‹œ๊ฐ„์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Next Cpu Burst Time ์˜ˆ์ธก ๋ฐฉ๋ฒ•

๊ณผ๊ฑฐ์˜ CPU ์‚ฌ์šฉ๋Ÿ‰์„ ์•Œ๋ฉด ์ง€์ˆ˜์  ํ‰๊ท ์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์ด์ „ CPU Burst ์‹œ๊ฐ„์˜ ๊ธธ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ์ตœ๊ทผ ์ •๋ณด์™€ ๊ณผ๊ฑฐ ์ •๋ณด๋ฅผ ๊ฐ€์ค‘์น˜๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•˜๋Š” Exponential Average๋ฅผ ์ด์šฉํ•˜์—ฌ CPU Burst Time ์˜ˆ์ธกํ•œ๋‹ค.

์‹ค์ œ ํ•ด๋‹น ์ˆ˜์‹์„ ์ ์šฉํ–ˆ์„ ๋•Œ ๊ทผ์‚ฌํ™”๋œ ๊ฐ’์„ ๊ตฌํ–ˆ์„ ๋•Œ์™€ ์‹ค์ œ CPU Burst๋ฅผ ๋น„๊ตํ•ด์„œ ํ™•์ธํ•ด๋ณด๋ฉด ๋‹ค์Œ์˜ ๊ทธ๋ž˜ํ”„๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์ค‘์น˜๋ฅผ 1/2๋กœ ํ–ˆ์„ ๋•Œ๋กœ time 2๊นŒ์ง€์˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ฯ„ฮฑฯ…_2 : 1/2 * 10 + 1/2 * 6 = 8 [ฯ„ฮฑฯ…_1 + t1] ๋กœ ํ˜„์žฌ(Time1)์— ๋Œ€ํ•œ CPU Burst ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์˜ˆ์ธก๊ฐ’์ด๋‹ค.
  2. ฯ„ฮฑฯ…_3 : 1/2 * 8 + 1/2 * 4 = 6 [ฯ„ฮฑฯ…_2 + t2] ๋กœ ํ˜„์žฌ(Time2)์— ๋Œ€ํ•œ CPU Burst ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์˜ˆ์ธก๊ฐ’์ด๋‹ค.

์™œ Exponential์ด๋ƒ

๊ฐ€์ค‘์น˜์˜ ์ค‘์š”์„ฑ
  • ์•ŒํŒŒ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ : ฯ„ฮฑฯ…_n+1 = ฯ„ฮฑฯ…_n์ด ๋œ๋‹ค. ์ด๋Š” ์™„์ „ํžˆ ์˜ˆ์ธก๊ฐ’๋งŒ์„ ๊ฐ€์ง€๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์•ŒํŒŒ๊ฐ’์ด 1์ธ ๊ฒฝ์šฐ : ฯ„ฮฑฯ…_n+1 = tn์ด ๋œ๋‹ค. ์ด๋Š” ์™„์ „ํžˆ ์ตœ๊ทผ์˜ CPU Burst๋งŒ์„ ๊ฐ€์ง€๊ณ  ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๊ธฐ๋ณธ์ ์ธ SJF๋Š” Non-Preemptiveํ•œ SJF๋กœ ์ด๋ฏธ ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ž๋ฆฌ๋ฅผ ํ›”์น˜์ง€ ์•Š๊ณ  ์™„๋ฃŒ๋œ ํ›„์— Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค ์ค‘์—์„œ ๊ฐ€์žฅ CPU Burst ์‹œ๊ฐ„์ด ์ ์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ์œ„์˜ ๋กœ์ง์—์„œ Preemptiveํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ• ๊นŒ?

SRTF Scheduling

์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready Queue์— ๋“ค์–ด์˜ค๋Š” ์ˆœ๊ฐ„์— ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•ด๋‹น ๊ฒฝ์šฐ ์ƒˆ๋กญ๊ฒŒ ๋“ค์–ด์˜จ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์‹คํ–‰์‹œ๊ฐ„์ด ์ž‘๋‹ค๋ฉด? ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ์„ ์ ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Shortest-Remaining-Time-First์˜ ์•ฝ์ž์ด๋ฉฐ SJF์˜ ์ข…๋ฅ˜ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋Š” Preemptive SJF Scheduling์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ฆ‰, ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ€์–ด๋‚ด๊ณ  ๋ณธ์ธ์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๋‹น ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ๋‹ค์Œ์˜ ํ”„๋กœ์„ธ์Šค ์ฒ˜๋ฆฌ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

์œ„ ํ”„๋กœ์„ธ์Šค๋“ค์„ SRTF๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋‹ค์Œ์˜ ์ฒ˜๋ฆฌ๊ณผ์ •์„ ๊ฐ€์ง„๋‹ค.

  1. P1์ด 0์ดˆ์— ๋„์ฐฉํ•˜์—ฌ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  2. 1์ดˆ๊ฐ€ ๋˜์–ด P1์˜ Burst Time์€ 7์ด ๋œ๋‹ค. ์ด ๋•Œ, P2๊ฐ€ ๋„์ฐฉํ•˜๊ณ  P1์˜ Remaining Burst Time(7)๊ณผ P2์˜ Burst Time(4)์„ ๋น„๊ตํ•  ๋•Œ P2๊ฐ€ ๋” ์ ๊ฒŒ ๋‚จ์•˜๊ธฐ์— P2๊ฐ€ CPU ์ž์›์„ ์„ ์ ํ•˜๊ณ  P1๋Š” Ready Queue๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
  3. 2์ดˆ๊ฐ€ ๋˜์–ด P2์˜ Burst Time์€ 3์ด ๋œ๋‹ค. ์ด ๋•Œ, P3๊ฐ€ ๋„์ฐฉํ•˜๊ณ  P2์˜ Remaining Burst Time(3)๊ณผ P3์˜ Burst Time(9)๋ฅผ ๋น„๊ตํ•  ๋•Œ P2๊ฐ€ ๋” ์ ๊ฒŒ ๋‚จ์•˜๊ธฐ์— P2๊ฐ€ CPU ์ž์›์„ ์„ ์ ํ•˜๊ณ  P3๋Š” Ready Queue๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
  4. 3์ดˆ๊ฐ€ ๋˜์–ด P2์˜ Burst Time์€ 2๊ฐ€ ๋œ๋‹ค. ์ด ๋•Œ, P4๊ฐ€ ๋„์ฐฉํ•˜๊ณ  P2์˜ Remaining Burst Time(2)๊ณผ P4์˜ Burst Time(5)๋ฅผ ๋น„๊ตํ•  ๋•Œ P2๊ฐ€ ๋” ์ ๊ฒŒ ๋‚จ์•˜๊ธฐ์— P2๊ฐ€ CPU ์ž์›์„ ์„ ์ ํ•˜๊ณ  P4๋Š” Ready Queue๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
  5. ์ดํ›„ Ready Queue์— ๋‚จ์•„์žˆ๋Š” P1, P3, P4๋ฅผ Burst Time์ด ์ž‘์€ ๊ฒƒ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Gantt chart ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

waiting time
  • Total Waiting Time : (10 - 1) + (1 - 1) + (17 - 2) + (5 - 3) =26
  • Average Waiting Time : 26/4 = 6.5

์œ„ ์ฒ˜๋ฆฌ๋ฅผ SJF Scheduling์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

waiting time
  • Total Waiting Time 0 + (8 - 1) + (12 - 2) + (17 - 3)= 31
  • Average Waiting Time : 31/4 = 7.75

SJF ์Šค์ผ€์ค„๋ง๊ณผ STFJ๋ฅผ ๋น„๊ต ํ–ˆ์„ ๋•Œ SRTF๊ฐ€ SJF๋ณด๋‹ค Average Wiating Time์ด ๋” ์งง์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ์„ ์ ์„ ํ•˜๋А๋ƒ ๋งˆ๋А๋ƒ์—์„œ ์„ฑ๋Šฅ์ด ๊ฐˆ๋ฆฐ ๊ฒƒ์ด๋‹ค.

RR Scheduling

Round-Robin Scheduling์œผ๋กœ ์‹œ๊ฐ„ ๊ณต์œ  ์‹œ์Šคํ…œ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” CPU Scheduling์ด๋‹ค. ์—ฌ๊ธฐ์„œ์˜ Round-Robin์€ Preemptive FCFS์˜ ๊ฐœ๋…์—์„œ Time Quantum(Time slice)์˜ ๊ฐœ๋…์„ ์ฒจ๊ฐ€ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด๋ฉด ๋œ๋‹ค. ์ฆ‰, preemptive FCFS๋ฅผ ํ•˜๋˜ ์‹œ๋ถ„ํ• ํ•˜์—ฌ time๊ฐ„๊ฒฉ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ ์ฃผ๋กœ Time quantum์€ ํ•˜๋‚˜์˜ ์‹œ๊ฐ„๋‹จ์œ„๋กœ 10~100ms๋ฅผ ์ฃผ๋กœ ์„ค์ •ํ•œ๋‹ค.

์ด๋Ÿฌํ•œ RR ์Šค์ผ€์ค„๋ง์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Ready Queue ๋Š” Circular Queue๊ฐ€ ๋˜์–ด์•ผํ•œ๋‹ค.

์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ณ„์†ํ•ด์„œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‚˜๊ฐ€๊ณ  ๋“ค์–ด๊ฐ€๋Š” ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด์•ผํ•œใ„ท.

์—ฌ๊ธฐ์„œ Scheduler๋Š” Ready Queue๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ 1 time quantum๋งˆ๋‹ค CPU๋ฅผ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค.

์œ„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ RR Scheduling์„ ํ†ตํ•ด ์‹คํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  Time Quantum์„ 4๋กœ ํ–ˆ์„ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  1. P1์ด 4์ดˆ ์‹คํ–‰ ํ›„ Context Switch
  2. P2๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ ์™„๋ฃŒ
  3. P3๊ฐ€ ์‹คํ–‰
  4. ์ดํ›„ P1์ด ๊ณ„์† Context Switch๋ฅผ ์ผ์œผํ‚ค๋ฉฐ ์ˆ˜ํ–‰

Waiting time
  • P1 = 10 - 4 = 6, P2 = 4, P3 = 7
  • Total Waiting Time : 6 + 4 + 7 = 17
  • Average Waiting Time : 17/3 = 5.66
Time Quantum ์„ค์ •์˜ ์ค‘์š”์„ฑ

RR Scheduling์˜ ๊ฒฝ์šฐ time quantum์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ์ด ์ขŒ์šฐ๋œ๋‹ค.

  • Time Quantum์„ 12๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋•Œ, Context Switch์˜ ์ˆ˜๋Š” 0์ด๋‹ค.
  • Time Quantum์„ 6์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋Œ€, Context Switch์˜ ์ˆ˜๋Š” 1์ด๋‹ค.
  • Time Quantum์„ 1์ด๋ผ๊ณ  ๊ฐ€์ •ํ–ˆ์„ ๋Œ€, Context Switch์˜ ์ˆ˜๋Š” 9์ด๋‹ค.

์ฆ‰, Time Quantum์„ ์ค„์ผ ์ˆ˜๋ก Context Switch๋Š” ์ž์ฃผ ์ผ์–ด๋‚œ๋‹ค. ์ด๊ฒƒ์ด ๋ฌธ์ œ๊ฐ€ ๋˜๋Š” ์ด์œ ๋Š” dispatch latency์˜ ๋ฌธ์ œ์ด๋‹ค. Dispatch Latency๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•  ์ˆ˜๋ก CPU์˜ ์‚ฌ์šฉ๋ฅ ์„ ์žก์•„๋จน๊ณ  ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๊ฐ€ ์ค„์–ด๋“ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.  ๋ฐ˜๋ฉด, Time Quantum์„ ํฌ๊ฒŒํ•  ์ˆ˜๋ก FCFS์™€ ์œ ์‚ฌํ•ด์ ธ ์งง์€ ์ž‘์—…์ด ์˜ค๋žซ๋™์•ˆ ๋Œ€๊ธฐํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ  ์‹ค์‹œ๊ฐ„์„ฑ์„ ๋ฐ˜์˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ์ ์ ˆํ•œ Time Quantum์„ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

Priority-based Scheduling

์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ํ”„๋กœ์„ธ์Šค์— ๊ณ ์œ ํ•œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๊ณ  ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € CPU๋ฅผ ํ• ๋‹น ๋ฐ›๋Š” ๊ตฌ์กฐ์ด๋‹ค. ํ•ด๋‹น ๊ณผ์ •์—์„œ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋™์ผํ•˜๋‹ค๋ฉด FCFS๋ผ๊ณ  ๋ด์•ผํ•œ๋‹ค.

์œ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•  ๋•Œ, ๋‹ค์Œ์˜ ๊ณผ์ •์ด ์ง„ํ–‰๋œ๋‹ค.

  1. ์šฐ์„ ์ˆœ์œ„๊ฐ€ 1์ธ P2๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  2. ์šฐ์„ ์ˆœ์œ„๊ฐ€ 2์ธ P5๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์ดํ›„ P1, P3, P4๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.

ํ•ด๋‹นํ•˜๋Š” Average Waiting Time์€ 8.2์ด๋‹ค.

์ด๋Ÿฌํ•œ ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์€ ์„ ์ ํ˜• ๋˜๋Š” ๋น„์„ ์ ํ˜•์˜ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

  • ์„ ์ ํ˜• ํŠน์ง• : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉ ์‹œ CPU๋ฅผ ์„ ์ ํ•œ๋‹ค. ์ฆ‰, ์ค‘๊ฐ„์— ๋“ค์–ด์˜ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.
  • ๋น„์„ ์ ํ˜• : ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ๋Œ€๊ธฐํ•œ๋‹ค.
Starvation

๊ธฐ์•„ ์ƒํƒœ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ด๊ฒƒ์€ ์šฐ์„ ์ˆœ์œ„ ์Šค์ผ€์ค„๋ง์—์„œ์˜ ๋‹จ์ ์œผ๋กœ ๊ผฝํžˆ๋ฉฐ ์ด๋Š” ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณ„์†ํ•ด์„œ Ready Queue์— ๋“ค์–ด์˜ค๋Š” ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ”„๋กœ์„ธ์Šค๋“ค์— ์˜ํ•ด ๊ณ„์† ๋Œ€๊ธฐ ์ƒํƒœ์— ๋จธ๋ฌด๋ฅด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๋ฌดํ•œ์ • ๋Œ€๊ธฐ(indefinite blocking)์˜ ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

์ด๋Ÿฌํ•œ ๊ฒƒ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ Aging์˜ ๊ฐœ๋…์„ ๋„์ž…ํ•œ๋‹ค. ๋‚˜์ด๋ฅผ ๋ถ€์—ฌํ•œ๋‹ค๋ผ๋Š” ๋А๋‚Œ์œผ๋กœ ์˜ค๋ž˜ ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฐ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ณ„์† ์กฐ์ •ํ•˜๊ธฐ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

RR + Priority Scheduling

์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋™์ผํ•œ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ฃผ๋กœ RR์„ ์ ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  1. ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์ œ์ผ ๋†’์€ P4๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
  2. P4๊ฐ€ ์ฒ˜๋ฆฌ๋œ ํ›„ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ P2, P3๋Š” RR ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด time quantum๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋“ค์ด Context Switching์„ ํ•˜๋ฉฐ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  3. P2๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ P3๋งŒ ๋‚จ์•˜๊ธฐ์— P3์˜ ์ฒ˜๋ฆฌ๋ฅผ ์™„๋ฃŒํ•œ๋‹ค.
  4. P3๊ฐ€ ์ฒ˜๋ฆฌ๋œ ํ›„ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฐ™์€ P1, P5๋Š” RR ์Šค์ผ€์ค„๋ง์„ ํ†ตํ•ด time quantum๋งˆ๋‹ค ํ”„๋กœ์„ธ์Šค๋“ค์ด Context Switching์„ ํ•˜๋ฉฐ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  5. P1์ด ์™„๋ฃŒ๋œ ํ›„ ๋‚จ์€ P5๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค.

์œ„ ๊ณผ์ •์€ ๋‹ค์Œ์˜ Gantt Chart๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

Multi-Level Queue Scheduling

ํ”„๋กœ์„ธ์Šค๋“ค์„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ๋กœ ๋‚˜๋ˆ„๊ณ  ๊ฐ ํ์— ์„œ๋กœ ๋‹ค๋ฅธ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

ํ•ด๋‹น ์Šค์ผ€์ค„๋ง์€ ํ”„๋กœ์„ธ์Šค๋“ค์˜ ํŠน์ง•์— ๋”ฐ๋ผ ํ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์Šค๋งˆํŠธํฐ์„ ์˜ˆ์‹œ๋กœ ๋“ค์—ˆ์„ ๋•Œ, ์ „ํ™”, ์นดํ†ก, Network, Display ๋“ฑ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ์ด ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋“ค์ด ๋™์ผ priority๋ฅผ ๊ฐ€์ง€์ง€ ์•Š๊ธฐ์— ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ํŠน์„ฑ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ํ๋กœ ๋ถ„๋ฆฌ๋˜๋Š”๋ฐ ๊ฐ ํ๋Š” ๊ณ ์œ ํ•œ ์Šค์ผ€์ค„๋ง ์ •์ฑ…์„ ๊ฐ€์ง€๊ณ  ํ ๊ฐ„์— ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

  • Real-time Processes : ์ตœ์ƒ์œ„ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ์ฆ‰๊ฐ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • System Processes : ์‹œ์Šคํ…œ ์šด์˜์— ํ•„์š”ํ•œ ์ž‘์—…์œผ๋กœ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.
  • Interactive Processes : ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ํ•„์š”ํ•œ ์ž‘์—…์œผ๋กœ ์ค‘๊ฐ„์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.
  • Batch Processes : ๊ธด ์ž‘์—… ์‹œ๊ฐ„์ด ํ•„์š”ํ•œ ์ž‘์—…์œผ๋กœ ๊ฐ€์žฅ ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค.

ํ๊ฐ„์˜ ์Šค์ผ€์ค„๋ง์€ ๋‹ค์Œ์˜ ๋ฐฉ์‹๋“ค๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

  1. Fixed-Priority Preemptive Scheduling : ์œ„์—์„œ ์ •์˜ํ•œ ๊ฐ ํ์˜ ์ ˆ๋Œ€์ ์ธ ์šฐ์„ ์ˆœ์œ„๋ฅผ ํ†ตํ•ด ๋†’์€ ์šฐ์„  ์ˆœ์œ„ ํ๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋ฉด CPU๋ฅผ ์„ ์ ํ•œ๋‹ค. ๊ทธ ์˜ˆ๋กœ Batch Queue์—์„œ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ Interactive Queue์— ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•˜๋ฉด Interactive ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šฐ์„  ์‹คํ–‰๋œ๋‹ค.
  2. Time-Slice : CPU ์‹œ๊ฐ„์„ ํ ๊ฐ„์— ๋ถ„ํ• ํ•˜์—ฌ ํ• ๋‹นํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, Interactive Queue์˜ ๊ฒฝ์šฐ ์ „์ฒด CPU ์‹œ๊ฐ„์˜ 80%๋ฅผ ๋ฐ›๊ณ  RR ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ์˜ ๊ฒฝ์šฐ 20%๋ฅผ ๋ฐ›๊ณ  FCFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

Multi-Level Feedback Queue

Multi-Level Queue Scheduling์˜ ํ™•์žฅ ๋ฒ„์ „์œผ๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์— ํ ๊ฐ„ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ด๋Š” CPU Burst Time, I/O ์š”์ฒญ์˜ ์—ฌ๋ถ€์™€ ๊ฐ™์€ ๋™์ ์ธ ํŠน์„ฑ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค์˜ ์œ„์น˜(ํ)๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ ์ฃผ๋กœ CPU Burst Time์ด ์งง์€ ๊ฒƒ๋“ค์€ ์ฃผ๋กœ ์ƒ์œ„ ํ์— CPU Burst Time์ด ๊ธด ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ๋Ÿ‰์˜ ๊ทน๋Œ€ํ™”๋ฅผ ์œ„ํ•ด ํ•˜์œ„ ํ์— ๋„ฃ์–ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

๋™์ž‘ ์›๋ฆฌ
  1. ์ดˆ๊ธฐ ์ƒํƒœ : ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค.
  2. ํ ์ด๋™ ์กฐ๊ฑด : CPU Burst Time์ด ๊ธธ์–ด ์ž์›์„ ๋…์ ํ•˜๋Š” ๊ฒฝ์šฐ ์ข€ ๋” ๋‚ฎ์€ ์šฐ์„ ์ˆ˜์œ„ ํ๋กœ ์ด๋™ํ•œ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์˜ค๋žซ๋™์•ˆ ๋Œ€๊ธฐ ์ƒํƒœ์— ์žˆ๋Š” ๊ฒฝ์šฐ ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์ด๋™ํ•œ๋‹ค.
  3. ํ ๊ฐ„ ์Šค์ผ€์ค„๋ง : ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ํ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.
์ฃผ์š” ๋งค๊ฐœ ๋ณ€์ˆ˜
  • ํ์˜ ๊ฐœ์ˆ˜
  • ๊ฐ ํ์˜ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ”„๋กœ์„ธ์Šค์˜ ์—…๊ทธ๋ ˆ์ด๋“œ ์กฐ๊ฑด
  • ํ”„๋กœ์„ธ์Šค ๊ฐ•๋“ฑ ์กฐ๊ฑด
  • ํ ์ง„์ž… ์กฐ๊ฑด

์œ„์˜ ๊ณผ์ •์€ ํ˜„๋Œ€์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋ฉฐ ์œ„์—์„œ ๋‚˜์˜จ Starvation์˜ ๋ฐฉ์ง€, ํšจ์œจ์  ์ž์›๊ด€๋ฆฌ, ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ์˜ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ตฌํ˜„์˜ ๋ณต์žก์„ฑ, ์˜ค๋ฒ„ํ—ค๋“œ์˜ ๋ฐœ์ƒ์ด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

5.4 Thread Scheduling

ํ˜„๋Œ€์—์„œ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ผ Thread Scheduling์„ ์ฃผ๋กœ ํ•˜๋ฉฐ ์ด๋Š” Kernel Threads๋“ค์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์šด์˜์ฒด์ œ๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์Šค์ผ€์ค„๋ง : ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ CPU๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ž‘์—…
  • ์Šค๋ ˆ๋“œ ๊ฐ„ ์Šค์ผ€์ค„๋ง : ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ ๊ฐ„์— CPU ๋ถ„๋ฐฐ
Kernel-Level Threads vs User-Leve Threads
  • Kernel-Level Threads : ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ๋…์ด ์•„๋‹ˆ๋ฉฐ ์šด์˜์ฒด์ œ์— ์˜ํ•ด ์ง์ ‘ ๊ด€๋ฆฌ๋˜๋ฉฐ ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ปค๋„์— ์˜ํ•ด
  • User-Level Threads : ์šด์˜์ฒด์ œ์˜ ๊ด€๋ฆฌ๊ฐ€ ์•„๋‹ˆ๊ธฐ์— ์ปค๋„์€ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๋ฉฐ ์‚ฌ์šฉ์ž ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๊ด€๋ฆฌํ•˜์—ฌ ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ๋™์ž‘ํ•œ๋‹ค.

๊ฒฐ๊ตญ OS๋Š” CPU Scheduling์„ Kernel-Level Threads๋งŒ์„ ๊ฐ€์ง€๊ณ  ์ˆ˜ํ–‰ํ•œ๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

5.5 Multiple Processor Scheduling

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์—์„œ CPU์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹์ด๋‹ค. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ์—์„œ์˜ ์•„ํ‚คํ…์ฒ˜๋Š” 4๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.

  • Multi-Core CPU
  • Multi-Threaded Cores (ํ•˜๋‚˜์˜ ์ฝ”์–ด์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ)
  • NUMA (Non-Uniform Memory Access) systems
  • Heterogeneous Multi-Processing

Simultaneous Multithreading (SMT)

ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์ฝ”์–ด์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ์ˆ ๋กœ, ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ์˜ ๋ณ‘๋ ฌ์„ฑ์„ ๊ฐ•ํ™”์‹œํ‚จ๋‹ค.

  • Common Ready Queue : ๋ชจ๋“  ์ฝ”์–ด๊ฐ€ ๊ณต์œ ํ•˜๋Š” ํ•˜๋‚˜์˜ Ready Queue๋งŒ ์กด์žฌํ•œ๋‹ค.
  • Per-Core Run Queues : ๊ฐ ์ฝ”์–ด๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” Ready Queue๊ฐ€ ์กด์žฌํ•œ๋‹ค.

Multi-Threaded Multi-Core System

๋ฉ€ํ‹ฐ์ฝ”์–ด ํ”„๋กœ์„ธ์„œ์™€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๊ธฐ์ˆ ์„ ๊ฒฐํ•ฉํ•ด ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ์‹œ์Šคํ…œ์œผ๋กœ ๋‹ค์Œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

  • Multi Processors : ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์นฉ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋…๋ฆฝ์ ์ธ CPU์ฝ”์–ด๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค. ๊ฐ ์ฝ”์–ด๋Š” ์ž์ฒด์ ์œผ๋กœ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ , ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.
  • Simultaneous MultiThreading : ํ•˜๋‚˜์˜ ๋ฌผ๋ฆฌ์  ์ฝ”์–ด์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ์ˆ ๋กœ CPU ์ž์›์˜ ์œ ํœด ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋ณ‘๋ ฌ์„ฑ์„ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

ํ•ด๋‹นํ•˜๋Š” ์‹œ์Šคํ…œ์˜ ์Šค์ผ€์ค„๋ง์€ ๋‹ค์Œ์˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๋”ฐ๋ฅธ๋‹ค.

  1. Load Balancing: ๋ชจ๋“  ์ฝ”์–ด๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ด€๋ฆฌํ•œ๋‹ค.
  2. Processor Affinity : ํ”„๋กœ์„ธ์„œ ์นœํ™”์„ฑ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋ฉด ํŠน์ • ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์ผํ•œ ์ฝ”์–ด์—์„œ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ•˜์—ฌ ์บ์‹œ ํ™œ์šฉ๋„๋ฅผ ๋†’์ธ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ•์ œ์„ฑ์˜ ์ •๋„์— ๋”ฐ๋ผ Soft, Hard๋กœ ๋‚˜๋‰œ๋‹ค.
  3. Push/Pull Migration : Push Migration์˜ ๊ฒฝ์šฐ ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋ฐœ์ƒํ•œ CPU์—์„œ ๋‹ค๋ฅธ CPU๋กœ ๊ฐ•์ œ๋กœ ์ด๋™์‹œํ‚ค๊ณ  Pull Migration์€ ์œ ํœด ์ƒํƒœ์˜ CPU๊ฐ€ ๋‹ค๋ฅธ CPU์—์„œ ์ž‘์—…์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

5.6 Real-Time CPU Scheduling

์‹ค์‹œ๊ฐ„ ์‹œ์Šคํ…œ์—์„œ์˜ CPU Scheduling์œผ๋กœ ํ•ด๋‹น ์‹œ์Šคํ…œ์€ ์‹œ๊ฐ„์— ๋Œ€ํ•œ ์—„๊ฒฉํ•œ ์ค€์ˆ˜๊ฐ€ ํ•„์ˆ˜์ ์ด๋ฉฐ, ํŠน์ • ์ž‘์—…์ด ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์™„๋ฃŒ๋˜์ง€ ์•Š์œผ๋ฉด ์‹œ์Šคํ…œ์˜ ์‹ ๋ขฐ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์ด ์†์ƒ๋  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ž‘์—…์—๋„ ๋‹ค์Œ ์œ ํ˜•์œผ๋กœ ๋‚˜๋‰˜์–ด์„œ Trade-off๋ฅผ ์ทจํ•ด๊ฐ„๋‹ค.

  • Soft Real-Time Tasks : ์‹œ๊ฐ„ ์ œ์•ฝ์„ ์ค€์ˆ˜ํ•˜์ง€ ๋ชปํ•ด๋„ ์‹œ์Šคํ…œ ์ „์ฒด์— ํฐ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ์ฆ‰, ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ์‹œ๊ฐ„๋‚ด์— ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๊ฒƒ์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ „ํ™”๊ธฐ, ์Œ์„ฑ RF ์‹ ํ˜ธ์˜ ์‚ฌ์šด๋“œ ๋ณ€ํ™˜์˜ ๊ฒฝ์šฐ ์ค‘๊ฐ„์ค‘๊ฐ„ ๋Š๊ธฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๊ฐ€ ํ•ด๋‹นํ•œ๋‹ค.
  • Hard Real-Time Tasks : ๋ฐ˜๋“œ์‹œ ์‹œ๊ฐ„ ์ œ์•ฝ์„ ์ค€์ˆ˜ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์œผ๋กœ ์‹คํŒจ ์‹œ์— ์‹ฌ๊ฐํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•œ๋‹ค. ๊ทธ ์˜ˆ์‹œ๋กœ ํ•ญ๊ณต๊ธฐ ์ œ์–ด ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ ์‹œ๊ฐ„์„ ์ค€์ˆ˜ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์ถ”๋ฝ์‚ฌ๊ณ ๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ๋‹ค.
Rate-Monotonic Scheduling

์ฃผ๊ธฐ์ ์ธ ์ž‘์—…์— ๋Œ€ํ•ด ๊ณ ์ •๋œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์ž‘์—…์˜ ์ฃผ๊ธฐ๊ฐ€ ์งง์„์ˆ˜๋ก ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค. ๋•Œ๋–„ CPU์˜ ํ™œ์šฉ๋„๋Š” 69.3์œผ๋กœ ์ œํ•œ๋œ๋‹ค. ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋ฉฐ ์˜ˆ์ธก์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ฃผ๊ธฐ์  ์ž‘์—…์— ์ ํ•ฉํ•˜์ง€๋งŒ CPU์˜ ํ™œ์šฉ๋„ ์ œํ•œ๊ณผ ์ฃผ๊ธฐ๊ฐ€ ๊ธด ์ž‘์—…๋“ค์€ ์žฅ์‹œ๊ฐ„ ๋Œ€๊ธฐํ•˜๋Š” ๊ธฐ์•„์ƒํƒœ์— ๋น ์ง€๊ฒŒ ๋œ๋‹ค.

Earlist Deadline First

Deadline์„ ๋‘์–ด ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ deadline์ด ์ž„๋ฐ•ํ•œ ์ž‘์—…์ด ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„๋‹ค. ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ CPU ํ™œ์šฉ๋„๊ฐ€ 100%๊นŒ์ง€ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋น„์ฃผ๊ธฐ์  ์ž‘์—…์—๋„ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ Deadline ๋ฐ ์˜ค๋ฒ„ํ—ค๋“œ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋น„์šฉ์ด ๋งŽ์ด ๋“ ๋‹ค.